package org.dzq.designmode.templatemethod;

/**
 * @ClassName: Abstract
 * @Package: org.dzq.designmode.templatemethod
 * @author: 越
 * @date: 2023/6/18 22:14
 * @Description: 抽象类/抽象模板
 *      模板方法：定义算法的框架，按照某种顺序调用其中的基本方法。真正被客户端掉用的方法
 *      具体方法：每个对象都会做的行为
 *      抽象方法：用于不确定对象的行为
 *      钩子方法：用于不同对象不确定会不会发生的行为
 */
public abstract class AbstractTemplate {

    //模板方法
    public void templateMethod(){
        specificMethod();
        abstractMethodA();
        abstractMethodB();
        hookMethod();
    }

    //具体方法
    public void specificMethod(){
        System.out.println("抽象类具体方法调用");
    }

    //抽象方法
    public abstract void abstractMethodA();

    public abstract void abstractMethodB();

    // 钩子方法，子类可根据实际情况选择是否要实现该方法
    public void hookMethod(){

    }

}
